// pages/video/video.js

// 视频缓存对象
let swiperScrollVideoList = {}
// 上拉分页存储
let pageLoading = {}
// 存储播放过的视频id  最大5个
let playtimeupdate = new Map()
/**
 * 类型
 * pageLoading = {
 *    0:1,
 *    1:1,
 *    2:1
 * }
 * console.log(pageLoading);
 * **/

Page({
  /**
   * 页面的初始数据
   */
  data: {
    // 导航标签数据
    videoGroupList: [],
    // 导航的标识
    navId: 0,
    // 所有视频列表数据
    allVideoList: [],
    // 当前所在分类的索引
    pageNum: 0,
    // 标识下拉刷新是否被触发
    isTriggered: false,
    // 控制icon开始图标显示隐藏
    dilay: true,
    // 视频地址
    videoUrl: '',
    // 播放视频id
    vdeid: '',
    // scroll停止滑动
    scrollem: true,
    swiperItemList:[]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function () {
    this.componentApp = getApp()
    this.getvideoGroupList()
  },
  // 获取视频标签列表
  async getvideoGroupList () {
    let videoGroupListData = await wx.$http.get('/video/group/list')
    // 更新data
    this.setData({
      videoGroupList: videoGroupListData.data.slice(0, 9),
      navId: videoGroupListData.data[0].id,
    })
    // 获取视频分类下的视频信息
    let data = await this.swiperVideoList(this.data.pageNum)
    // 更新全局变量 swiperScrollVideoList  更新data
    this.updatedata(data)
    // 添加第一个分页页码
    pageLoading[this.data.pageNum] = 1
  },
  // 分类列表点击
  changeNav (event) {
    // 获取下标  data-key 传参
    let index = event.currentTarget.dataset.clickindex
    // 获取视频id 
    let tapid = event.currentTarget.dataset.tapid
    this.setData({
      navId: tapid,
      pageNum: index
    })
    // 点击时 添加对应分类的分页页码
    pageLoading[this.data.pageNum] = 1
  },
  // swiper滑动回调
  async pageChange (event) {
    // 当前分类下标
    let pageNum = event.detail.current
    this.setData({
      pageNum
    })
    // 判断当前分类数据  没有就获取
    if (!this.data.allVideoList[pageNum]) {
      let data = await this.swiperVideoList(pageNum)
      // 更新全局变量 swiperScrollVideoList  更新data
      this.updatedata(data)
      // 添加对应分类的分页页码
      pageLoading[this.data.pageNum] = 1
    }
  },
  // 获取视频标分类的视频Http请求函数
  async swiperVideoList (index, loading = 0) {
    // 当前分类id
    let id = this.data.videoGroupList[index].id
    let httpData = await wx.$http.get('/video/group', { id, offset: loading * 8 })
    // 如果loading不为0，就是上拉刷新，就更新全局变量 swiperScrollVideoList
    if (!loading) {
      swiperScrollVideoList[index] = httpData.datas
    }
    return httpData.datas
  },
  // 视频srcoll下拉刷新
  async handleToLower () {
    let _this = this
    // 获取当前分类数据
    let data = await this.swiperVideoList(this.data.pageNum)
    // 判断成功延时更新  （为了动画）
    if (data) {
      setTimeout(() => {
        _this.setData({
          allVideoList: swiperScrollVideoList,
          isTriggered: false
        })
      }, 1000)
    }
  },
  // 上拉刷新
  async ltolower () {
    let _this = this
    this.setData({
      scrollem: false
    })
    // 当前分类分页页码
    let offsetIndex = pageLoading[this.data.pageNum]
    // 当前分类下标
    let index = this.data.pageNum
    // 请求结果
    let ltoldata = await this.swiperVideoList(index, offsetIndex)
    // 更新全局变量 swiperScrollVideoList   push()当前分类的数组中
    swiperScrollVideoList[index].push(...ltoldata)
    // 延时更新data，为了动画
    setTimeout(() => {
      _this.updatedata(ltoldata)
      this.setData({
        scrollem: true
      })
    }, 700)
    // 当前分类分页页码 +1
    offsetIndex++
    // 更新当前分类分页页码
    pageLoading[this.data.pageNum] = offsetIndex
  },
  // 转跳视频详情页
  navtap (e) {
    let { itemvideovid } = e.currentTarget.dataset
    wx.navigateTo({
      url: '/pages/videoPlayer/videoPlayer?id=' + itemvideovid
    });
  },
  // 点击图片，播放视频 
  async iconClick (event) {
    // 获取视频id
    let id = event.currentTarget.id
    // 获取视频地址
    let resdata = await wx.$http.get('/video/url', { id: id })
    this.setData({
      videoUrl: resdata.urls[0].url,
      vdeid: id,
      dilay: false
    })
    // 获取video组件对象
    const videoContext = wx.createVideoContext(id, this);
    // 获取当前视频有没有播放过，有就设置当前视频播放到之前播放的时间
    const playtimeupdateId = playtimeupdate.has(id)
    if (playtimeupdateId) {
      videoContext.seek(playtimeupdate.get(id))
    }
    // 播放视频
    videoContext.play()
  },
  bindloaddata (e) {
    console.log('源数据加载', e);
  },
  // 播放进度变化时触发回调    存储播放过的视频时间   最大存储5
  timeupdate (e) {
    let id = e.currentTarget.id
    let date = e.detail.currentTime
    // playtimeupdate中是key超过5个就清空数据
    if (playtimeupdate.size >= 5) {
      playtimeupdate.clear()
    }
    playtimeupdate.set(id, date)
  },
  // 更新setdata中的视频数据
  updatedata (data) {
    if (data) {
      this.setData({
        allVideoList: swiperScrollVideoList,
      })
    }
  },
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    let _this = this
    setTimeout(() => {
      _this.componentApp.fadeout_show(_this, 'slide_up1', 0)
    }, 2000)
    setTimeout(() => {
      _this.componentApp.fadeout_show(_this, 'slide_up2', 0)
    }, 4000)
  },
})